/*
 * Copyright 2006-2008 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.martinimix.service.payment.provider.cybersource;

import net.martinimix.domain.order.Order;
import net.martinimix.domain.payment.BillMeLaterAccount;
import net.martinimix.domain.payment.BillMeLaterAccountAuthorization;
import net.martinimix.service.payment.provider.BillMeLaterProcessor;

/**
 * Provides a Bill Me Later credit service that uses CyberSource
 * to process payment transactions.
 * 
 * @author Scott Rossillo
 *
 */
public class CyberSourceBillMeLaterProcessor 
	extends CyberSourceCreditCardProcessor implements BillMeLaterProcessor {
	
	/**
	 * Creates a new Bill Me Later payment processor.
	 */
	public CyberSourceBillMeLaterProcessor() {
		super();
		super.setCyberSourceRequestAdapter(new BillMeLaterCyberSourceRequestAdapter());
		super.setCyberSourceResponseAdapter(new BillMeLaterResponseAdapter());
	}
	
	/* (non-Javadoc)
	 * @see net.martinimix.service.payment.provider.BillMeLaterProcessor#authorizePayment(net.martinimix.domain.payment.BillMeLaterAccount, net.martinimix.domain.order.Order)
	 */
	public final BillMeLaterAccountAuthorization authorizePayment(
			BillMeLaterAccount billMeLaterAccount, Order order) {
		
		final BillMeLaterAccountAuthorization auth = 
			(BillMeLaterAccountAuthorization) super.authorizePayment(billMeLaterAccount, order);
		
		if(auth.isPositiveResponse()) {
			billMeLaterAccount.setCardNumber(auth.getAccountNumber());
		}
		
		return auth;
	}
	
}
